package com.quanyan.travel.aop;

import com.google.gson.Gson;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Pointcut;

/**
 * Created by xiaoxiao on 16/9/14.
 *
 * 日志记录,操作,更新
 */
//@Aspect
//@Configuration
public class LogAspect {

    /**
     * web端业务系统的增删\更新\操作
     *
     * 第一个*表示返回类型\ 第二个*表示任意方法名 (..)表示任意参数
     *
     * */
    @Pointcut("execution(* com.quanyan.travel.web.admin.*.*(..))")
    public void webBusinessUpdate() {}

    /**
     * 在web对业务系统操作以后立刻更新业务系统的
     *
     * */
    @AfterReturning(value="webBusinessUpdate()")
    public void insertWebBusinessServiceCallCalls(JoinPoint joinPoint) throws Throwable{

        //获取登录管理员id
        //web端将用户id存放在head中 , 在filter中校验admin是否加入用户登录信息
        Long adminUserId = 0L;

        if(adminUserId == null){//没有管理员登录
            return;
        }

        //判断参数
        if(joinPoint.getArgs() == null){//没有参数
            return;
        }

        //获取方法名
        String methodName = joinPoint.getSignature().getName();

        //获取操作内容
        String opContent = adminOptionContent(joinPoint.getArgs(), methodName);

        //创建日志对象


        //添加日志
    }

    /**
     * 使用Java反射来获取被拦截方法(insert、update)的参数值，
     *
     * 根据
     */
    public String adminOptionContent(Object[] args, String mName) throws Exception{

        if (args == null) {
            return null;
        }

        StringBuffer rs = new StringBuffer();
        rs.append("[请求方法名称:"+mName+";请求参数:");

        if (null!=args && args.length>0) {
            Gson gson = new Gson();
            rs.append(gson.toJson(args[0]));
        }else {
            rs.append("无");
        }

        return rs.toString();
    }
}
